package de.dubiel.plung.server.dao;

import java.util.List;

import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;

import de.dubiel.plung.shared.dao.User;

/**
 * Über diese Klasse wird der Zugriff auf die einzelnen Objekte im Speicher
 * ermöglicht.
 * 
 * @author alike
 * 
 */
public class DataStore {

    /**
     * Liefert einen Benutzer anhand seiner ID zurück.
     * 
     * @param id
     *            ID mit der der User gespeichert wurde
     * @return der User, oder {@code null}, wenn kein User gefunden wurde
     */
    public static User findUserById(String id) {
        Objectify service = getService();
        return service.load().type(User.class).id(id).now();
    }

    /**
     * Speichert einen Benutzer
     * 
     * @param user
     *            der Benutzer
     */
    public static void saveUser(User user) {
        Objectify service = getService();
        service.save().entity(user).now();
    }

    public static List<User> getAllUsersSorted(String sortColumn) {
        Objectify service = getService();
        return service.load().type(User.class).list();
    }

    public static int getNumRegisteredUsers() {
        Objectify service = getService();
        return service.load().type(User.class).count();
    }

    private static Objectify getService() {
        return ObjectifyService.ofy();
    }
}
